package view;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.stage.Stage;
import javafx.util.Callback;
import javafx.scene.layout.*;

// 列表视图(内容的宽高超过列表时自动出现滚动条)
public class ListViewDemo extends Application {
	private Pane root = new Pane();
	private ListView<String> lv = new ListView<>();

	public static void main(String[] args) {
		Application.launch(args);
	}
	
	@Override
	public void start(Stage stage) {
		
		lv.setPrefSize(200, 200);
		lv.getItems().addAll("小明", "小红", "小陈", "小杨", "小黄");
		lv.setFixedCellSize(30);
		lv.setPlaceholder(new Label("没有数据"));		// 列表中无数据时显示
//		lv.setOrientation(Orientation.HORIZONTAL);		// 设置内容放置方式
		lv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);  // 设置可以多选（按ctrl键多选，默认为单选）
//		lv.setEditable(true);
//		lv.setCellFactory(TextFieldListCell.forListView());	 	// 文本输入框编辑
		lv.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {		// 改变样式,还可以设置编辑(还有一种设置单元的方式)
			int index = 0;
			@Override
			public ListCell<String> call(ListView<String> param) {		// 对每个单元依次调用函数
				ListCell<String> listCell = new ListCell<String>();
				HBox hBox = new HBox();
				if(index % 2 == 0) {
					hBox.setStyle("-fx-background-color: pink");
				} else {
					hBox.setStyle("-fx-background-color: lightgreen");
				}
				hBox.setAlignment(Pos.CENTER);
				if(index < lv.getItems().size() ) {			// 注意
					hBox.getChildren().add(new Label(lv.getItems().get(index)) );
				}
				listCell.setGraphic(hBox);
				index++;
				return listCell;
			}
		});
		root.getChildren().add(lv);
		
		Scene scene = new Scene(root, 400, 300);
		stage.setScene(scene);
		stage.show();
		
		// 选项的监听
		lv.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {

			@Override
			public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
				System.out.println(newValue);
			}
		});
	}
}





